﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CodeGenerationPipeline;
using CodeGenerationPipeline.Contracts;
using System.IO;
using VisualStudioProvider.Configuration;
using VisualStudioProvider;
using AbstraX;
using Microsoft.VisualStudio.TextTemplating;
using AbstraX.Contracts;
using System.Diagnostics;
using Utils;
using Microsoft.Build.Framework;
using AbstraX.TypeMappings;
using AbstraX.ServerInterfaces;
using GeneratorLibrary;
using System.Text.RegularExpressions;
using AbstraX.Bindings;
using AbstraX.AssemblyInterfaces;

namespace ClassWrapper
{
    public abstract class ClassWrapperGenerator : BaseGenerator
    {
        public delegate string ReplaceStandardFileNameHandler(string name);
        protected delegate void ReplaceStandardTypeNameHandler(ref string name);
        protected delegate void ReplaceStandardNameHandler(ref string name);

        public abstract override string Name { get; }
        public abstract override string Description { get; }
        public abstract override ICodeGenerationPackage GenerateFrom(Dictionary<string, IElementBuild> builds, DirectoryInfo workspaceDirectory);
        public abstract override ICodeGenerationPackage GenerateFromPackage(ICodeGenerationPackage incomingPackage);
        public abstract override IProgrammingLanguage ProgrammingLanguage { get; }
    }
}
